/**
 * @param {Number} num 数值
 * @returns {String} 处理后的字符串
 * @description 如果传入的数值小于10，即位数只有1位，则在前面补充0
 */
const getHandledValue = num => {
  return num < 10 ? '0' + num : num
}

/**
 * @param {Number} timeStamp 传入的时间戳
 * @param {Number} startType 要返回的时间字符串的格式类型，传入'year'则返回年开头的完整时间
 */
export const getDate = (timeStamp, startType = 'date') => {
  const d = new Date(timeStamp)
  const year = d.getFullYear()
  const month = getHandledValue(d.getMonth() + 1)
  const date = getHandledValue(d.getDate())
  const hours = getHandledValue(d.getHours())
  const minutes = getHandledValue(d.getMinutes())
  const second = getHandledValue(d.getSeconds())
  let resStr = ''
  if (startType === 'date') {
    resStr = year + '-' + month + '-' + date
  } else if (startType === 'full') {
    resStr = year + '-' + month + '-' + date + ' ' + hours + ':' + minutes + ':' + second
  } else {
    resStr = month + '-' + date + ' ' + hours + ':' + minutes
  }
  return resStr
}

// 将 Date 转化为指定格式的 String
// 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符，
// 年(y)可以用 1-4 个占位符，毫秒(S)只能用 1 个占位符(是 1-3 位的数字)
// 例子：
// formatDate(date, "yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423
// formatDate(date, "yyyy-M-d h:m:s.S")      ==> 2006-7-2 8:9:4.18
export const formatDate = (date, fmt = 'yyyy-MM-dd') => {
  let _date = new Date(date)
  let o = {
    'M+': _date.getMonth() + 1,                   // 月份
    'd+': _date.getDate(),                        // 日`
    'h+': _date.getHours(),                       // 小时
    'm+': _date.getMinutes(),                     // 分
    's+': _date.getSeconds(),                     // 秒
    'q+': Math.floor((_date.getMonth() + 3) / 3), // 季度
    'S': _date.getMilliseconds()                  // 毫秒
  }
  if (/(y+)/.test(fmt)) {
    fmt = fmt.replace(RegExp.$1, (`${_date.getFullYear()}`).substr(4 - RegExp.$1.length))
  }
  for (let k in o) {
    if (new RegExp(`(${k})`).test(fmt)) {
      fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : ((`00${o[k]}`).substr((`${o[k]}`).length)))
    }
  }
  return fmt
}
